
#target illustrator

#include "csv_reader.jsx"



function replaceAndCopyObjects() {
    var doc = app.activeDocument;
    var selectedItems = doc.selection;

    // 输入验证
    if (selectedItems.length < 3) {
        alert("请按顺序选中三个对象：\n1. 基准裁片（位置参考）\n2. 替换裁片\n3. 需复制的裁片");
        return;
    }

    items = copyANdReplaceItems(selectedItems,[7])
    // items = copyANdReplaceItems(items,["9"])
    // items = copyANdReplaceItems(items,["10"])
}

function copyANdReplaceItems(items,contents) {
        // 对象定义
        var firstItem = items[0];
        var secondItem = items[1];
        var thirdItem = items[2];

        // 记录背板的基准位置
        var baseBounds = thirdItem.geometricBounds;
        
        var baseCenter = [(baseBounds[0]+baseBounds[2])/2,(baseBounds[1]+baseBounds[3])/2];
        
        // 先复制基准底板
        baseItem = CopyObject(thirdItem,[0,0])
        var newBaseBounds= baseItem.geometricBounds
        var newBaseCenter = [(newBaseBounds[0]+newBaseBounds[2])/2,(newBaseBounds[1]+newBaseBounds[3])/2];
       
        var relativePos = [newBaseCenter[0] - baseCenter[0], newBaseCenter[1] - baseCenter[1]];

        newFirstItem = CopyObjectReferTo(firstItem,relativePos)

        newFirstItem1 = replaceItem(newFirstItem,contents[0])

        // 相对位置复制2
        newSecondItem = CopyObjectReferTo(secondItem,relativePos)
    
    return [newFirstItem,baseItem]
}

function CopyObject(item, relativePos) {
    // 基准裁片参数计算
    var baseBounds = item.geometricBounds;

    var baseWidth = baseBounds[2] - baseBounds[0];
    // 复制操作
    var spacing = baseWidth * 0.35; // 动态间隔
    var newCopy = item.duplicate();
    newCopy.position = [
        baseBounds[2] - spacing + relativePos[0],
        baseBounds[1] - relativePos[1]
    ];
    return newCopy
}

function CopyObjectReferTo(item,relativePos) {
    // 基准裁片参数计算
    var itemBounds = item.geometricBounds;

    var itemCenter = [(itemBounds[0]+itemBounds[2])/2,(itemBounds[1]+itemBounds[3])/2];

    // 复制操作
    var newCopy = item.duplicate();
    newCopy.position = [
        itemCenter[0] + relativePos[0] - item.width/2,
        itemCenter[1] + item.height/2,
    ];
    return newCopy
}

function replaceItem(item,content) {
    
    var doc = app.activeDocument; // 添加文档引用
    
    // 确保有可用的图层，如果没有则创建一个
    var targetLayer;
    if (doc.layers.length === 0) {
        targetLayer = doc.layers.add();
    } else {
        targetLayer = doc.layers[0];
    }
    
    // 解锁目标图层
    targetLayer.locked = false;
    targetLayer.visible = true;
    
    // 设置当前活动图层
    doc.activeLayer = targetLayer;
    
    
        // 创建文本对象
        var newText = doc.textFrames.add();
        newText.contents = content;


         // 关键修改：设置无衬线几何字体
         var geometricFonts = [".Hiragino Kaku Gothic Interface W8", "Helvetica", "Impact", "Futura", "Roboto"]; // 无衬线字体列表
         var targetFont = null;
         
         // 尝试加载指定字体（优先选择几何感强的无衬线字体）
         for (var i = 0; i < geometricFonts.length; i++) {
             try {
                //  targetFont = app.textFonts.getByName(geometricFonts[i]);
                 break; // 找到可用字体后退出循环
             } catch (e) {
                 continue; // 字体不存在则尝试下一个
             }
         }
         
         // 应用字体样式（无衬线+粗体+锐利风格）
         if (!targetFont) {
             var charAttr = newText.textRange.characterAttributes;
             
             // 安全地复制字体设置
             try {
                alert(item.textRange)
                alert(item.textRange.characterAttributes.textFont)
                 // 检查源对象是否有有效的文本和字体
                 if (item && item.textRange && item.textRange.characterAttributes && item.textRange.characterAttributes.textFont) {
                     // 获取字体名称而不是直接赋值字体对象
                     var sourceFontName = item.textRange.characterAttributes.textFont.name;
                     // 通过名称查找并设置字体
                     var sourceFont = app.textFonts.getByName(sourceFontName);
                     charAttr.textFont = sourceFont;
                 } else {
                     // 如果源对象没有有效字体，使用默认字体
                     charAttr.textFont = app.textFonts.getByName("Hiragino Kaku Gothic Interface W8");
                 }
             } catch (e) {
                 // 如果字体设置失败，使用系统默认字体
                 try {
                     charAttr.textFont = app.textFonts.getByName("Arial");
                 } catch (e2) {
                     // 如果Arial也不存在，使用第一个可用字体
                     if (app.textFonts.length > 0) {
                         charAttr.textFont = app.textFonts[0];
                     }
                 }
             }
             
             charAttr.bold = true; // 增强锐利感
             charAttr.size = 670; // 基础字号（后续会被缩放覆盖）
             charAttr.tracking = -5; // 字符间距收紧，增强紧凑感
         }

        //  alert(targetFont)
        
        // 动态缩放计算
        var textBounds = newText.geometricBounds;
        var textWidth = textBounds[2] - textBounds[0];
        var textHeight = textBounds[1] - textBounds[3];
        var scaleFactor1 = item.height / textHeight; // 保留20%边距
        var scaleFactor2 = item.width / textWidth; // 保留20%边距
        
        // 应用缩放
        // newText.resize(scaleFactor2 * 100, scaleFactor1 * 100);
        // newText.textRange.characterAttributes.size = 24;

        var itemBounds = item.geometricBounds;

    

    // var baseCenter = [(baseBounds[0]+baseBounds[2])/2,(baseBounds[1]+baseBounds[3])/2];
    var itemCenter = [(itemBounds[0]+itemBounds[2])/2,(itemBounds[1]+itemBounds[3])/2];
        // 重新计算位置（缩放后尺寸变化）
        newText.position = [
            itemCenter[0] - newText.width/2,
            itemCenter[1] + newText.height/2
        ];
    item.remove(); 
    return newText
}

// 方式1：显示文件选择对话框
// var data = readCSV();
replaceAndCopyObjects();
